package com.skillworld.webapp.web.pages.rest.school;

import org.apache.tapestry5.annotations.ContentType;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.annotations.SessionState;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.services.Request;

import com.skillworld.webapp.model.courseservice.CourseService;
import com.skillworld.webapp.model.courseservice.LessonWithoutExamsException;
import com.skillworld.webapp.model.courseservice.LessonWithoutTutorialsException;
import com.skillworld.webapp.model.courseservice.LessonsRequiredException;
import com.skillworld.webapp.model.util.PermissionDeniedException;
import com.skillworld.webapp.web.util.ErrorMessages;
import com.skillworld.webapp.web.util.UserSession;

import es.udc.pojo.modelutil.exceptions.InstanceNotFoundException;

@ContentType("text/xml")
public class FinishCourse {

	@SuppressWarnings("unused")
    @Property
    private String errorMessage = null;
    
    @Inject
    private CourseService courseService;
   
    @SessionState(create=false)
    private UserSession userSession;
   
    private boolean userSessionExists;
    
    @Inject
    private Request request;
    	
    void onPassivate()
    { 
        return; 
    }
    
    void onActivate()
    {
        if (!userSessionExists)
        {
            errorMessage = ErrorMessages.NOT_LOGGED_IN;
            return;
        }

        String courseParam = request.getParameter("course");
        if (courseParam == null)
        { 
            errorMessage = ErrorMessages.INVALID_ARGUMENTS;
            return;
        }
        
        try 
        { 
            long courseId = Long.parseLong(courseParam);
			courseService.finishCourse(userSession.getUserId(), courseId);
		}
        catch(NumberFormatException e)
        { errorMessage = ErrorMessages.INVALID_ARGUMENTS; }
    	catch (InstanceNotFoundException e) 
    	{ errorMessage = ErrorMessages.INSTANCE_NOT_FOUND; } 
    	catch (PermissionDeniedException e) 
    	{ errorMessage = ErrorMessages.PERMISSION_DENIED; }
        catch (LessonWithoutTutorialsException e)
        { errorMessage = ErrorMessages.LESSON_WITHOUT_TUTORIALS; } 
    	catch (LessonWithoutExamsException e)
    	{ errorMessage = ErrorMessages.LESSON_WITHOUT_EXAMS; } 
    	catch (LessonsRequiredException e) 
    	{ errorMessage = ErrorMessages.LESSONS_REQUIRED; }
    }
}
